#词频统计
'''
实现步骤：
    1，读取数据
    2，文本预处理（去掉标点符号 等 非中文内容）
    3，分词
    4，去停用词
    5，词频统计
'''
import re
from collections import Counter

import jieba

STOP_WORDS = [
    '的', '了', '和', '是', '在', '我', '有', '这', '个', '也', '要', '都', '就','由','将','等','为',
    '会', '要', '可以', '对', '我们', '他们', '她', '他', '它', '这', '那', '你', '我','从','到','如','年'
]


#1，读取数据
def read_file(filename):
    try:
        with open(filename,'r' ,encoding='utf-8') as f:
            return f.read()
    except FileExistsError as e:
        print('找不到文件')
    except Exception as e:
        print(f'文件读取失败{e}')

#词频统计
def worde_frequency(text,top_n):
    #2，文本预处理（去掉标点符号 等 非中文内容）
    pattern = '[^\u4e00-\u9fa5A-Za-z]'
    text = re.sub(pattern,'',text)

    #3，分词
    words = jieba.lcut(text)

    #4，去停用词
    words = [w for w in words if w not in STOP_WORDS]

    #5，词频统计
    words_count = Counter(words)

    #取top_n数据
    return words_count.most_common(top_n)

    # print(words_count)


if __name__ == '__main__':
    text = read_file('data.txt')
    result = worde_frequency(text,5)
    #打印输出
    print('中文词频统计的结果：')
    print('*'*25)
    print('{:<18}{:<18}'.format('词语','频次'))
    for word,count  in result:
        print('{:<18}{:<18}'.format(word,count))